﻿/*
    Copyright 2008 Travis Scholtens
    
    This file is part of Anticipa-Do List.

    Anticipa-Do List is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Anticipa-Do List is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Anticipa-Do List.  If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Anticipa_Do_List
{
    /// <summary>
    /// Notification interface implemented by plugins.
    /// </summary>
    public interface INotificationManager
    {
        /// <summary>
        /// Text description for display in interfaces.
        /// </summary>
        string Description { get; }

        /// <summary>
        /// Retrieves the configuration keys.
        /// </summary>
        /// <returns>List of key-value pairs, the keys of which represent the plugin's configurable values,
        /// and the values of which represent whether the values are to be hidden while displayed.</returns>
        List<KeyValuePair<string, bool>> GetConfigurationKeys();

        /// <summary>
        /// Sets the configuration values and initializes the object for setting notifications.
        /// </summary>
        /// <param name="values">List of configuration values, in same order as keys returned by
        /// <c>GetConfigurationKeys()</c>.</param>
        void SetConfigurationValues(List<string> values);

        /// <summary>
        /// Sets a notification for the given task ID. If a notification already exists for the ID,
        /// moves it to reflect the new time.
        /// </summary>
        /// <param name="id">Unique task ID.</param>
        /// <param name="description">Text description of task.</param>
        /// <param name="time">Time of notification.</param>
        void SetNotification(Guid id, string description, DateTime time);
    }
}
